// Fantacalcio.cpp : Defines the entry point for the console application.
/*
Scrivere un programma che simuli il fantacalcio.
Il software all'avvio genera in modo casuale un elenco di calciatori con nomi, cognomi, forza (da 100 a 10) e prezzo.
Una volta avviato il programma;
Esso deve:
1) Creare la squadra a partire da un budget
2) Giocare contro una squadra di Bot
3) Ottenere i goal dei giocatori
4) Visualizzare i dati della propria squadra

Il programmatore crea un algoritmo che, a partire dalle due squadre, ottenga tramite una formula il numero di goal fatti da ogni squadra,
e di conseguenza il risultato
*/

#include "stdafx.h"
#include <iostream>
#include <string.h>
#include <math.h>
#include <time.h>

#define CALCIATORI 30
#define FORZAMIN 10
#define FORZAMAX 100
#define FORZAM 90
#define BUDGET 1000
#define PREZZOMIN 10
#define PREZZOMAX 60
#define GRATIS 0
#define NOMELEN 8
#define COGNOLEN 8
#define GOAL 10
#define RANDMIN 65
#define RANDN 25
#define LUCK 16
#define MLTP 20

using namespace std;

typedef struct
{
	char nome[NOMELEN];
	char cognome[COGNOLEN];
	int forza;
	int prezzo;
	int goal[CALCIATORI];
}CALCIATORE;

void menu();
void crea(CALCIATORE squadra[]);
void gioca(CALCIATORE squadra[]);
void goal(CALCIATORE squadra[], CALCIATORE avversari[]);
void visualizza_dati(CALCIATORE squadra[]);
void visualizza_dati_sq(CALCIATORE squadra[], CALCIATORE avversari[]);

int main()
{
	srand(time(NULL));
	menu();
	system("pause");
    return 0;
}

void menu()
{
	int scelta;
	CALCIATORE squadra[CALCIATORI];
	do
	{
		system("cls");
		printf("0. Esci\n");
		printf("1. Crea squadra\n");
		printf("2. Giocatore VS Bot\n");
		printf("3. Visualizza dati\n");
		scanf_s("%d", &scelta, sizeof(int));
		switch (scelta)
		{
		case 1:
			crea(squadra);
			break;
		case 2:
			gioca(squadra);
			break;
		case 3:
			visualizza_dati(squadra);
			break;
		}
	} while (scelta != 0);
}

void crea(CALCIATORE squadra[])
{
	int x;
	int budget = BUDGET;
	for (int j = 0; j < CALCIATORI; j++)
	{
		x = 1 + rand() % NOMELEN;
		for (int i = 0; i < x; i++)
		{
			squadra[j].nome[i] = RANDMIN + rand() % RANDN;
		}
		squadra[j].nome[x] = '\0';
		x = 1 + rand() % COGNOLEN;
		for (int i = 0; i < x; i++)
		{
			squadra[j].cognome[i] = RANDMIN + rand() % RANDN;
		}
		squadra[j].cognome[x] = '\0';
		do
		{
			squadra[j].forza = 1 + rand() % FORZAM;
		} while (squadra[j].forza > FORZAMAX);
		do
		{
			squadra[j].prezzo = rand() % PREZZOMAX;
		} while (squadra[j].prezzo > PREZZOMAX);
		if (squadra[j].prezzo > budget)
		{
			if (budget == NULL)
			{
				squadra[j].prezzo = GRATIS;
			}
			else
				budget = NULL;
		}
		else
			budget = budget - squadra[j].prezzo;
	}
	printf("Soldi spesi per i giocatori: %d\n", BUDGET - budget);
	printf("Saldo rimanente: %d\n", budget);
	system("pause");
}

void gioca(CALCIATORE squadra[])
{
	CALCIATORE avversari[CALCIATORI];
	printf("Avversari:\n");
	crea(avversari);
	visualizza_dati_sq(squadra, avversari);
	goal(squadra, avversari);
}

void visualizza_dati(CALCIATORE squadra[])
{
	for (int j = 0; j < CALCIATORI; j++)
	{
		printf("Giocatore %d\n", j + 1);
		printf("Nome: %s\n", squadra[j].nome);
		printf("Cognome: %s\n", squadra[j].cognome);
		printf("Forza: %d\n", squadra[j].forza);
		printf("Prezzo: %d\n\n", squadra[j].prezzo);
	}
	system("pause");
}

void goal(CALCIATORE squadra[], CALCIATORE avversari[])
{
	int gs;
	int ga;
	int x;
	int sommaf_s=FORZAMIN;
	int sommaf_a=FORZAMIN;
	for (int j = 0; j < CALCIATORI; j++)
	{
		x = 1+rand() % LUCK;
		if (x == LUCK)
		{
			sommaf_s = sommaf_s + MLTP *(squadra[j].forza);
		}
		else
		sommaf_s = sommaf_s + squadra[j].forza;
	}
	for (int j = 0; j < CALCIATORI; j++)
	{
		x = 1 + rand() % LUCK;
		if (x == LUCK)
		{
			sommaf_a = sommaf_a + MLTP * (avversari[j].forza);
		}
		else
			sommaf_a = sommaf_a + avversari[j].forza;
	}
	printf("Forza della tua squadra: %d\n", sommaf_s);
	printf("Forza degli avversari: %d\n", sommaf_a);
	gs = (int) (sommaf_s / (GOAL*sqrt(sommaf_s)));
	ga = (int) (sommaf_a / (GOAL*sqrt(sommaf_a)));
	if (gs>ga)
	{
		printf("Punteggio: %d %d\n", gs, ga);
		printf("Ha vinto la tua squadra con %d goal!\n", gs);
	}
	else
	if (gs<ga)
	{
		printf("Punteggio: %d %d\n", gs, ga);
		printf("Ha vinto la squadra avversaria con %d goal!\n", ga);
	}
	else
	if(gs==ga)
	{
		printf("Punteggio: %d %d\n", gs, ga);
		printf("Pareggio!\n");
	}
	system("pause");
}

void visualizza_dati_sq(CALCIATORE squadra[], CALCIATORE avversari[])
{
	printf("Squadra \t\t Nemici\n\n");
	for (int j = 0; j < CALCIATORI; j++)
	{
		printf("Giocatore %d:\t\tGiocatore %d:\n", j + 1, j+1);
		printf("Nome: %s\t\tNome: %s\n", squadra[j].nome, avversari[j].nome);
		printf("Cognome: %s\t\tCognome: %s\n", squadra[j].cognome, avversari[j].cognome);
		printf("Forza: %d\t\tForza: %d\n", squadra[j].forza, avversari[j].forza);
		printf("Prezzo: %d\t\tPrezzo: %d\n\n", squadra[j].prezzo, avversari[j].prezzo);
	}
	system("pause");
}